package com.bdqn.ch01.SZ.sz2;

import java.lang.reflect.Field;

/**
 * JavaBean
 *
 * @aurhor Administrator  whs
 * @since 2024/7/1
 */
public class JavaBean {

    public static void main(String[] args) {

//        通过反射操作Person

        try {

            // 创建JavaBean实例
            Class cls = Class.forName("com.bdqn.ch01.Sl.Person");
            Object person = cls.newInstance();

            // 调用类中的方法和属性 对象名.方法 对象名.属性
            //获取name属性
            Field name = cls.getDeclaredField("name");

            // name 的属性为private , 这里已经超出其访问范围 ，不能直接访问
            // 通过 setAccessible 方法 可以访问到
            name.setAccessible(true);
            System.out.println("赋值前的name: "+name.get(person));

            // 为name 赋值
            name.set(person,"嫩猪小野猫~");  // 相当于调用了setName("嫩猪小野猫~")
            System.out.println("赋值后的name: "+name.get(person));


            //获取massage属性
            Field massage = cls.getDeclaredField("massage");
            System.out.println("\n赋值前的massage: "+massage.get(person));
            // 为 massage 赋值
            massage.set(person, "18");  // 相当于调用了setMassage(18)
            System.out.println("赋值后的massage: "+massage.get(person));

            /**
             * 赋值前的name: null
             * 赋值后的name: 嫩猪小野猫~
             *
             * 赋值前的massage: null
             * 赋值后的massage: 18
             */


        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } catch (InstantiationException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        }
    }

}
